package com.wy.sloth.core;

/**
 * 本项目使用到的名字的管理器（如redis中使用的相关key值、队列）
 * 
 * @author wangyuan
 * @since 2019年1月31日
 */
public interface SlothNameManager {

    /**
     * 获取本应用应该使用的消息列表（list）的key
     * @return
     */
    String getApplicationQueueKey();
    
    /**
     * 获取存储消息type与队列的映射关系的有序集合（zset）的key，<br/>
     * member = [type]:[消息队列名]；score = [type的整数类型]
     * @return
     */
    String getType2QueueKey();
    
    /**
     * 获取存储消息日志的哈希（hash）的key，<br/>
     * field = [msgId]；value = [msg的json体]
     * @return
     */
    String getMsgLogKey();
    
    /**
     * 获取存储消息处理状态（dealStatus）与“消息MsgId:处理队列”的集合（set）的key，<br/>
     * member = [msgId]:[处理的消息队列名]
     * @param dealStatus
     * @return
     */
    String getDealStatus2MsgIdAndQueueKey(int dealStatus);
    
    /**
     * 获取存储消息处理结果的哈希（hash）的key，<br/>
     * field1 = dealStatus；value1 = 处理状态<br/>
     * field2 = updatedTime；value2 = 处理时间<br/>
     * field3 = errorMsg；value3 = 错误原因
     * @param msgId
     * @param queueName
     * @return
     */
    String getDealResultKey(String msgId, String queueName);
    
    /**
     * 获取存储消息处理结果的哈希（hash）的key，<br>
     * {@link #getDealResultKey(String, String)}
     * @param keySuffix
     * @return
     */
    String getDealResultKey(String keySuffix);
    
    /**
     * 获取存储消息与创建时间关系的有序集合（zset）的key，<br/>
     * member = [msgId]；score = [创建时间戳]
     * @return
     */
    String getMsg2CreatedTimeKey();
    
    /**
     * 获取创建清理日志工作进程的标志位的字符串（string）的key，<br/>
     * value = [0或1]
     * @return
     */
    String getClearLogWorkerFlagKey();
    
    /**
     * 获取存储消息处理结果的哈希（hash）的key的前缀，<br/>
     * {@link #getDealResultKey(String, String)}
     * @param msgId
     * @return
     */
    String getDealResultKeyPrefix(String msgId);
    
    /**
     * 获取存储消息处理结果的哈希（hash）的key的前缀，<br/>
     * {@link #getDealResultKey(String, String)}
     * @return
     */
    String getDealResultKeyPrefix();
    
    /**
     * 获取临时结构的key
     * @return
     */
    String getTempKey();
    
    /**
     * 获取存储消息回执信息的哈希（hash）的key，<br/>
     * field=[msgId]:[处理的消息队列名]，value=[消息回执json数据体]
     * @return
     */
    String getMsgReceiptKey();
    
    /**
     * 获取需要加锁的key的锁的key
     * @param needLockKey
     * @return
     */
    String getLockKey(String needLockKey);
}
